package com.lihaozhe.orderservice.feign;

import com.lihaozhe.orderservice.client.PaymentServiceClient;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 *
 * 支付服务降级处理类
 * 当支付服务不可用时，Feign会调用这个类的方法作为fallback
 * <p>
 * 降级策略：
 * - 返回默认值
 * - 返回缓存数据
 * - 记录日志并抛出业务异常
 * - 触发备用流程
 * </p>
 *
 * @author 李昊哲
 * @version 1.0.0
 */
@Component
public class PaymentServiceFallback implements PaymentServiceClient {

  /**
   * 支付服务不可用时的降级处理
   */
  @Override
  public Map<String, Object> createPayment(Map<String, Object> paymentRequest) {
    System.err.println("支付服务不可用，使用降级处理");

    return Map.of(
        "success", false,
        "message", "支付服务暂时不可用，请稍后重试",
        "fallback", true,
        "paymentId", ""
    );
  }

  /**
   * 查询支付状态的降级处理
   */
  @Override
  public Map<String, Object> getPaymentStatus(Map<String, Object> request) {
    System.err.println("支付服务不可用，无法查询支付状态");

    return Map.of(
        "status", "UNKNOWN",
        "message", "支付服务不可用，无法获取支付状态",
        "fallback", true
    );
  }

  /**
   * 退款服务的降级处理
   */
  @Override
  public Map<String, Object> refund(Map<String, Object> refundRequest) {
    System.err.println("支付服务不可用，无法处理退款");

    return Map.of(
        "success", false,
        "message", "支付服务不可用，退款请求已记录，稍后处理",
        "fallback", true,
        "refundId", "FALLBACK_" + System.currentTimeMillis()
    );
  }
}
